/* go语言的每一行结尾不需要写; */
package main

/* 导入包 */
import "fmt"
import "strconv"

/*
	入口函数
	主要演示:类型转换

	看到第68页
*/
func main(){
	fmt.Println("==HelloWorld==")

	/* 类型转换 */
	var i int32 = 100;
	/* 把i变成flat */
	var n1 float32 = float32(i);

	fmt.Println("i的值为", i)
	fmt.Println("n1的值为", n1)

	var n2 int8 = int8(i);
	var n3 int64 = int64(i);
	fmt.Printf("n2=%v,n3=%v \n", n2,n3)
	/* 查看变量类型 */
	fmt.Printf("i的类型为:%T", i)

	/* 练习 */
	var a1 int32 = 32;
	var a2 int64 ;
	var a3 int8 ; 

	a2 = int64(a1) + 20;
	a3 = int8(a1) + 20;

	fmt.Println("a2的值为:", a2 , ";a3的值为:", a3)
	fmt.Printf("a2的类型为 %T;a3的类型为:%T \n", a2 , a3)

	fmt.Println("基本类型转字符串 ======第一种方式======")
	var b2 int32 = 200;
	/* 整数 */
	var b3 = fmt.Sprintf("%d", b2)
	fmt.Printf("b2的类型为:%T;b3的类型为: %T \n", b2, b3)

	var b4 float64 = 3.14;
	b3 = fmt.Sprintf("%d", b4)
	fmt.Printf("b2的类型为:%T;b3的类型为: %T \n", b2, b3)

	var b5 bool = true;
	b3 = fmt.Sprintf("%t", b5)
	fmt.Printf("b2的类型为:%T;b3的类型为: %T \n", b2, b3)
	fmt.Println("b5的值为:", b5, ";b3的值为:", b3)

	/* 不同类型的转换,值不一样 */
	var b6 byte = 'c';
	b3 = fmt.Sprintf("%c", b6)
	fmt.Printf("b2的类型为:%T;b3的类型为: %T \n", b2, b3)
	fmt.Println("b5的值为:", b6, ";b3的值为:", b3)

	fmt.Println("基本类型转字符串 ======第二种方式======")
	/* 整数 */
	b3 = strconv.FormatInt(int64(b2), 10)
	fmt.Printf("b2的类型为:%T;b3的类型为: %T \n", b2, b3)

	b4 = 3.14;
	b3 = strconv.FormatFloat(b4, 'f', 10, 64)
	fmt.Printf("b2的类型为:%T;b3的类型为: %T \n", b2, b3)

	b5 = true;
	b3 = strconv.FormatBool(b5)
	fmt.Printf("b2的类型为:%T;b3的类型为: %T \n", b2, b3)
	fmt.Println("b5的值为:", b5, ";b3的值为:", b3)

	fmt.Println("=========string类型转换基本数据类型=========")

	var c1 string = "true"
	var c2 bool;

	/* 转换boolean类型
	此方法有两个返回值:(value bool,err error),如果不想使用error可以使用_代替,表示忽略
	*/
	c2,_ = strconv.ParseBool(c1);
	fmt.Printf("c2的值为:%v,c的类型为:%T\n", c2,c2)

	/* 转换成整数类型 */
	var d1 string = "10"
	var d2 int64 ;

	d2, _ = strconv.ParseInt(d1, 10, 64);
	fmt.Printf("d2的值为:%v,d的类型为:%T\n", d2,d2)


	/* 转换成Float类型 */
	var e1 string = "10.12"
	var e2 float64 ;

	e2, _ = strconv.ParseFloat(e1, 64);
	fmt.Printf("e2的值为:%v,e的类型为:%T\n", e2,e2)
}